package controllers;

import java.io.File;
import java.lang.reflect.Constructor;
import java.util.List;

import models.Bateau;
import models.Carte;
import models.Couleur;
import models.Modele_bateau;

import org.hibernate.annotations.Check;

import controllers.CRUD.ObjectType;

import play.*;
import play.data.validation.MaxSize;
import play.data.validation.MinSize;
import play.data.validation.Required;
import play.db.Model;
import play.exceptions.TemplateNotFoundException;
import play.mvc.*;

@CRUD.For(models.Bateau.class)
@With(Secure.class)
public class AdminBateau extends CRUD
{
	// Page création
    public static void blank() 
    {
    	List<Couleur> couleurs = Couleur.findAll();
    	List<Modele_bateau> modeles = Modele_bateau.findAll();
    	render(couleurs, modeles);
    }
    
	// Crée un nouveau bateau
    public static void enregistrer(@Required
    								long couleur_id,
    								@Required @MaxSize(50) @MinSize(5)
    								String nom,
    								@Required
    								long modele_id)  
    {
    	List<Couleur> couleurs = Couleur.findAll();
    	List<Modele_bateau> modeles = Modele_bateau.findAll();
    	
		if(validation.hasErrors())
		{
			render("AdminBateau/blank.html", couleurs, modeles, nom);
		}
		
		else if(Bateau.find("byNom", nom).first() != null)
		{
			String message = "Nom de bateau déjà utilisé";
			render("AdminBateau/blank.html", couleurs, modeles, nom, message);			
		}
		
		else
		{
			Couleur clr = Couleur.findById(couleur_id);
			Modele_bateau mdl = Modele_bateau.findById(modele_id);
			Bateau bateau = new Bateau(clr, mdl, nom).save();
			redirect("/admin/adminbateau");
		}
    }
    
	// Edite un bateau
    public static void edit(long id,
				    		@Required
							long couleur_id,
							@Required @MaxSize(50) @MinSize(5)
							String nom,
							@Required
							long modele_id)  
    {
    	List<Couleur> couleurs = Couleur.findAll();
    	List<Modele_bateau> modeles = Modele_bateau.findAll();    	
    	Bateau bateau = Bateau.findById(id);
    	
		if(validation.hasErrors())
		{
			render("AdminBateau/show.html", couleurs, modeles, nom, bateau);
		}
		
		else if(Bateau.find("byNom", nom).first() != null &&
				Bateau.find("byNom", nom).first() != bateau)
		{
			String message = "Nom de bateau déjà utilisé";
			render("AdminBateau/show.html", couleurs, modeles, nom, bateau, message);	
		}
		
		else
		{
			bateau.nom = nom;
			bateau.couleur = Couleur.findById(couleur_id);
			bateau.modele = Modele_bateau.findById(modele_id);
			bateau.save();
			redirect("/admin/adminbateau");
		}
    } 
    
    // Affiche la page d'édition
    public static void show(String id) 
    {
    	long _id = Long.parseLong(id);
    	List<Couleur> couleurs = Couleur.findAll();
    	List<Modele_bateau> modeles = Modele_bateau.findAll();        	
    	Bateau bateau = Bateau.findById(_id);
        String nom = bateau.nom;
        long couleur_id = bateau.couleur.id;
        long modele_id = bateau.modele.id;
        render(bateau, couleur_id, couleurs, modele_id, modeles, nom);
    }     
}
